#include <iostream>
using namespace std;


// 继承方式

// 父类
class Base1
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

class Base2
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

// 继承的好处：减少代码重复
// 语法：class 子类 ： 继承方式 父类
// 子类 也称为 派生类
// 父类 也称为 基类

// 公共继承
class Son1 : public Base1
{
public:
    int m_D;
};

// 保护继承
// class Son2 : protected Base2
// {
// public:
//     void func()
//     {
//         m_A = 100;  // 父类中的公共权限  到子类中变为权限
//         m_B = 100;  // 父类中的保护权限  到子类中依然是保护权限
//         // m_C = 10;  // 父类中的私有权限  到子类访问不到
//     }
// };

void test01() 
{
    // 16
    // 父类中所有非静态成员属性都会被子类继承下去；
    // 父类中私有成员属性，是被编译器隐藏了，因此访问不到，但确实是被进程下去了
    cout << "size of Son = " << sizeof(Son1) << endl;

} 

// void test02() 
// {
//     Son2 s2;
//     // s2.m_A = 100;  // 在 Son2 中， m_A 变为保护权限，因此访问
//     // cout << s2.m_A << endl;
//     // s1.m_B = 100;

// } 

int main()
{
    test01();
    // cout << "hello" << endl;
    return 0;
}